 package com.deliccio.controller.mantenimientos;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.deliccio.entitys.Cliente;
import com.deliccio.entitys.Estadosgenerales;
import com.deliccio.entitys.Menu;
import com.deliccio.entitys.Parametros;
import com.deliccio.entitys.Producto;
import com.deliccio.entitys.Ranking;
import com.deliccio.entitys.Usuario;
import com.deliccio.service.MantenimientoAsignarProductosService;
import com.deliccio.service.PrincipalService;
import com.deliccio.util.Constantes;

@Controller
@RequestMapping("/mantenimiento")
public class MantenimientoAsignarProductosController{
	@Autowired
	private PrincipalService principalService;
	
	@Autowired
	private MantenimientoAsignarProductosService mantenimientoAsignarProductosService;
	
	@RequestMapping(value="/asigarProductos",method=RequestMethod.GET)
	public String obtenerPedido(@RequestParam(required=false) Integer inter,Model model,HttpSession session){
		Usuario usuario=(Usuario) session.getAttribute(Constantes.SESION_USUARIO);
		Cliente cliente=(Cliente) session.getAttribute(Constantes.SESION_CLIENTE);
		List<Menu> menus=null;
		if(usuario != null){		
			session.setAttribute(Constantes.SESION_USUARIO,usuario);
			menus=principalService.obtenerMenusUsuario(usuario);
		}
		else if(cliente != null){
			session.setAttribute(Constantes.SESION_CLIENTE,cliente);
			menus=principalService.obtenerMenusCliente(cliente);
		}
		if(usuario == null && cliente == null){
			menus=principalService.obtenerMenus();
		}
		if(menus != null){
			model.addAttribute("menus",menus);
		}
		session.setAttribute(Constantes.SESION_COD_INTER,inter);
		List<Parametros> tiposConjuntos=mantenimientoAsignarProductosService.obtenerTiposProductos();
		model.addAttribute("tiposConjuntos",tiposConjuntos);
		List<Ranking> lstProductos = principalService.listaProductos();
		model.addAttribute("lstProductos",lstProductos);
		return "mantenimiento/asignarProductos/asignarProductos";
	}
	
	@RequestMapping(value="/asignarProductos/obtenerProducto",method=RequestMethod.GET)
	public @ResponseBody List<Producto> obtenerProducto(HttpSession session,Model model){
		 List<Producto>  lst = mantenimientoAsignarProductosService.obtenerProductoConjuntosActivos();
		 System.out.println(" lst :  " + lst);
		return lst;
	}
	
	@RequestMapping(value="/asignarProductos/obtenerProductoAsignados/{lblProduc}/{id}",method=RequestMethod.GET)
	public @ResponseBody List<Producto> obtenerProductoAsignados(@PathVariable String lblProduc , @PathVariable int id ,  HttpSession session,Model model){	
		return mantenimientoAsignarProductosService.obtenerProductosAsignados(id);
	}
	
	@RequestMapping(value="/productosDisponibles/{id}",method=RequestMethod.GET)
	public @ResponseBody List<Producto> obtenerProductosDisponibles( @PathVariable int id , @RequestParam(required=false) String nombre , @RequestParam(required=false) int tipo  ,  HttpSession session,Model model,HttpServletRequest request){
		return mantenimientoAsignarProductosService.obtenerProductosDisponibles(id,nombre,tipo);
	}
	
	@RequestMapping(value="/guardarAsginados",method=RequestMethod.POST)
	public @ResponseBody int guardarAsignados( Producto producto , int[] idAsignado,Boolean activo , Boolean completo){
		if(activo){
			producto.setEstadosgenerales(new Estadosgenerales(1));
		}else{
			producto.setEstadosgenerales(new Estadosgenerales(2));
		}			
		producto.setCompleto(completo);		
		return mantenimientoAsignarProductosService.guardarAsignados(producto,idAsignado);
	}
}
